<?php
/**
 * 数据类
 * 
 * Copyright (c) 2014~2019 https://desion.net All rights reserved.
 * Author: 阿林 QQ:120867629 <linhong00@gmail.com>
 */
declare (strict_types = 1);
namespace dsphp;

class Db
{
    protected $app;
    protected $log;
    // 数据库连接实例
    protected $instance = [];
    // 数据库配置
    protected $config = [];
    // 查询次数
    protected $queryTimes = 0;


    // 构造函数
    public function __construct(App $app)
    {
        $this->app = $app;
        $this->log = $app->log;
    }

    /**
     * 创建/切换数据库连接查询
     *
     * @param  string $name   连接配置标识
     * @param  array  $config 链接参数
     * @param  bool   $force  强制重新连接
     * @return object
     */
    public function connect(string $name, array $config, bool $force = false)
    {
        if ($force || ! isset($this->instance[$name])) {
            $type  = !empty($config['type']) ? $config['type'] : 'mysql';
            $class = '\\dsphp\\db\\' . ucfirst($type);

            $this->instance[$name] = new $class($this, $config);
        }

        return $this->instance[$name];
    }

    /**
     * 更新查询次数
     */
    public function updateQueryTimes(): void
    {
        $this->queryTimes++;
    }

    /**
     * 重置查询次数
     */
    public function clearQueryTimes(): void
    {
        $this->queryTimes = 0;
    }

    /**
     * 获得查询次数
     */
    public function getQueryTimes(): int
    {
        return $this->queryTimes;
    }

    /**
     * 记录SQL日志
     *
     * @param string $log  SQL日志信息
     * @param string $type 日志类型
     * @return void
     */
    public function log(string $log, string $type = 'sql')
    {
        $this->log->log($type, $log);
    }
}
